#ifndef __LCD_H__
#define __LCD_H__

typedef struct
{
    int lcd_fd;         //  显示屏文件描述符
    int xres;		    //	显示屏宽度(横向像素点个数)
    int yres;		    //	显示屏高度(纵向像素点个数)
    int bits;           //  单个像素点所占 bit 数
    unsigned int *plcd; //  帧缓冲内存的首地址
    //  按需增加
}LCD;                   //  用来描述一个显示屏

#define FB "/dev/fb0"   //  显示屏文件路径



/*
    lcd_init:   帧缓冲初始化,相关成员变量赋初值
    @l:         指向的空间保存帧缓冲初对应的信息
    retval:     成功返回 0
                失败返回 <0
*/      
int lcd_init(LCD *l);


/*
    lcd_uninit:     帧缓冲解初始化,扫尾工作
    @l:             指向的空间保存帧缓冲初对应的信息
*/      
void lcd_uninit(LCD *l);


/*
    display_point:  在坐标地址(x,y)显示一个颜色为 color 像素点
    @x:             像素点在坐标轴的 X 坐标
    @y:             像素点在坐标轴的 Y 坐标 
    @color:         待显示颜色
    @plcd:          指向了 Linux 帧缓冲,保存其首地址
*/
void display_point(int x,int y,unsigned int color,unsigned int *plcd);

/*
    display_rectangle:  在坐标地址(x0,y0)显示一个颜色为 color 宽为 w,高为 h 的矩形
    @x0:                待显示矩形在坐标轴的 X 坐标起点
    @y0:                待显示矩形在坐标轴的 Y 坐标起点
    @w:                 待显示矩形 宽度
    @h:                 待显示矩形 高度
    @color:             待显示颜色
    @plcd:              指向了 Linux 帧缓冲,保存其首地址
*/
void display_rectangle(int x0,int y0,int w,int h,unsigned int color,unsigned int *plcd);

/*
    display_circle:     在坐标地址(x0,y0)为圆心显示一个颜色为 color 半径为r 的圆形
    @x0:                待显示圆形的圆心在坐标轴的 X 坐标
    @y0:                待显示圆形的圆心在坐标轴的 Y 坐标
    @r:                 待显示圆形的半径
    @color:             待显示颜色
    @plcd:              指向了 Linux 帧缓冲,保存其首地址
*/
void display_circle(int x0,int y0,int r,unsigned int color,unsigned int *plcd);

void display_doublelink(unsigned int color,unsigned int *plcd);
void display_block(int x,int y,unsigned int *plcd);

void display_all(unsigned int *plcd);
void display_init(unsigned int *plcd);
void display_hit(int x,int y,unsigned int *plcd);
void draw_close_icon(int x0, int y0, int r, unsigned int *plcd) ;
void draw_plus_icon(int x0, int y0, int r, unsigned int *plcd) ;
void draw_minus_icon(int x0, int y0, int r, unsigned int *plcd) ;
void lcd_show1();
void lcd_show2(int score);
void lcd_show3();
void lcd_show4(int speed);
void lcd_show5();
void lcd_show6();
void lcd_show7();
void reset_game(LCD l);
#endif